package com.ruoyi.product.service.impl;

import com.ruoyi.common.core.context.SecurityContextHolder;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.product.domain.MallProductInfo;
import com.ruoyi.product.domain.MallProductRuleCenter;
import com.ruoyi.product.mapper.MallProductInfoMapper;
import com.ruoyi.product.request.MallProductInfoRequest;
import com.ruoyi.product.response.MallProductResponse;
import com.ruoyi.product.service.IMallProductInfoService;
import com.ruoyi.product.service.IMallProductRuleCenterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 商品信息Service业务层处理
 *
 * @author qi
 * @date 2025-08-24
 */
@Service
public class MallProductInfoServiceImpl implements IMallProductInfoService
{
    @Autowired
    private MallProductInfoMapper mallProductInfoMapper;
    @Autowired
    private IMallProductRuleCenterService iMallProductRuleCenterService;


    /**
     * 查询商品信息
     *
     * @param id 商品信息主键
     * @return 商品信息
     */
    @Override
    public MallProductResponse selectMallProductInfoById(String id)
    {

        MallProductResponse mallProductResponse = mallProductInfoMapper.selectMallProductInfoById(id);
        //根据商品ID到商品规格中间表mall_product_rule_center查询数据
        List<MallProductRuleCenter> ruleCenterList = iMallProductRuleCenterService.selectMallProductRuleCenterListByProductId(mallProductResponse.getId());
        //将查询的规格中间表数据放到skuList集合中
        mallProductResponse.setSkuList(ruleCenterList);
        return mallProductResponse;
    }

    /**
     * 查询商品信息列表
     *
     * @param mallProductInfo 商品信息
     * @return 商品信息
     */
    @Override
    public List<MallProductResponse> selectMallProductInfoList(MallProductInfo mallProductInfo)
    {
        return mallProductInfoMapper.selectMallProductInfoList(mallProductInfo);
    }

    /**
     * 新增商品信息
     *
     * @param mallProductInfoRequest 商品信息
     * @return 结果
     */
@Override
public int insertMallProductInfo(MallProductInfoRequest mallProductInfoRequest)
{
    mallProductInfoRequest.setId(IdUtils.simpleUUID());
    mallProductInfoRequest.setCreateBy(SecurityContextHolder.getUserId().toString());
    mallProductInfoRequest.setCreateTime(DateUtils.getNowDate());
    int i = mallProductInfoMapper.insertMallProductInfo(mallProductInfoRequest);
    //获取商品信息skuList
    List<MallProductRuleCenter> skuList = mallProductInfoRequest.getSkuList();
    skuList.forEach(sku->{
        //商品编号一般都是uuid，更改商品编号
        sku.setNumber(IdUtils.simpleUUID());
        //商品id赋值给productId
        sku.setProductId((mallProductInfoRequest.getId()));
        //使用商品规格中间表业务层对象调用插入方法
        //iMallProductRuleCenterService.insertMallProductRuleCenter(sku);
    });
    //批量添加
    iMallProductRuleCenterService.insertMallProductRuleCenterList(skuList);
    return i;
}

    /**
     * 修改商品信息
     *
     * @param mallProductInfoRequest 商品信息
     * @return 结果
     */
@Override
public int updateMallProductInfo(MallProductInfoRequest mallProductInfoRequest)
{
    mallProductInfoRequest.setUpdateTime(DateUtils.getNowDate());
    //修改人
    mallProductInfoRequest.setUpdateBy(SecurityContextHolder.getUserId().toString());
    //修改商品规格中间表 mall_product_rule_center
    iMallProductRuleCenterService.updateProductRuleCenter(mallProductInfoRequest.getId(),
            mallProductInfoRequest.getSkuList());
    //修改商品表
    return mallProductInfoMapper.updateMallProductInfo(mallProductInfoRequest);

//    mallProductInfo.setUpdateTime(DateUtils.getNowDate());
//return mallProductInfoMapper.updateMallProductInfo(mallProductInfo);
}

    /**
     * 批量删除商品信息
     *
     * @param ids 需要删除的商品信息主键
     * @return 结果
     */
@Override
public int deleteMallProductInfoByIds(String[] ids)
{
return mallProductInfoMapper.deleteMallProductInfoByIds(ids);
}

    /**
     * 删除商品信息信息
     *
     * @param id 商品信息主键
     * @return 结果
     */
@Override
public int deleteMallProductInfoById(String id)
{
return mallProductInfoMapper.deleteMallProductInfoById(id);
}
}